#ifndef _TSQUEUE_H_
#define _TSQUEUE_H_

#include <queue>
#include "CommonMessages.h"

template <class T>
class TSQueue
{
public:
	TSQueue(void);
	~TSQueue(void);

	DWORD WaitOnEmpty(int ms=INFINITE);
	void WaitOnNotEmpty(void);

	void Push(const T& item);
	T Pop(void);

	void Reset(void);

private:
	std::queue<T> mTaskQueue;
	CRITICAL_SECTION mCS;

	HANDLE emptyEvent, notEmptyEvent;
};

#include "TSQueue.cpp"

#endif

